import { reqlogin, reqGetUserInfo, reqGetUserDetailById } from '@/api/user'
import { getToken, removeToken, setToken } from '@/utils/auth.js'
import { resetRouter } from '@/router'
const state = {
  // 一进入优先从缓存中取
  token: getToken() || null, // 优先从cookie中读取
  userInfo: {}
}
const mutations = {
// 设置token
  setToken(state, newToken) {
    state.token = newToken
    // 设置token同时,同步到本地cookies中
    setToken(newToken)
  },

  // 删除token
  removeToken(state) {
    state.token = null
    // 删除vuex的token同时,同步到本地cook中移除
    removeToken()
  },
  setUserInfo(state, newUserInfo) {
    state.userInfo = newUserInfo
  },
  removeUserInfo(state) {
    state.userInfo = {}
  }
}
const actions = {
  logout(context) {
    // console.log('logout.....')
    context.commit('removeToken')
    context.commit('removeUserInfo')
    // 重置路由
    resetRouter()
  },
  // 获取token的异步操作,封装到action内
  async login(context, data) {
    // data 就是用户基本的资料
    // 1.发送ajax
    const res = await reqlogin(data)
    // 2.调用mutation
    context.commit('setToken', res.data)
    // return res
  },
  // 获取用户资料actions
  async getUserInfo(context) {
    // 1. 发ajax
    const res = await reqGetUserInfo()
    // console.log('res------------', res.data.roles.menus)
    // console.log(res.data)
    const userInfo = await reqGetUserDetailById(res.data.userId)
    // console.log('用户信息', userInfo.data)
    // 2. 调用mutation
    context.commit('setUserInfo', { ...res.data, ...userInfo.data })
    // console.log(res)
    // return 用户能访问页面
    return { ...res.data, ...userInfo.data }
  },
  // 退出
  exit(context) {
    // 1.清除token
    context.commit('removeToken')
    // 2.清除用户信息
    context.commit('removeUserInfo')
    // 3.重置用户的路由规则
    resetRouter()
    // 4.重置权限模块中的routes
    context.commit('permission/setRoutes', [], { root: true })
  }
}
export default {
  namespaced: true,
  state,
  mutations,
  actions

}

